package cn.iocoder.yudao.module.crossborder.order.controller.admin.ordershipment.vo;

import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 跨境电商订单发货 Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderShipmentRespVO {

    @Schema(description = "发货编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9361")
    @ExcelProperty("发货编号")
    private Long id;

    @Schema(description = "发货单号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("发货单号")
    private String shipmentNo;

    @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11630")
    @ExcelProperty("订单编号")
    private Long orderId;

    @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("订单号")
    private String orderNo;

    @Schema(description = "发货仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11748")
    @ExcelProperty("发货仓库编号")
    private Long warehouseId;

    @Schema(description = "发货仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
    @ExcelProperty("发货仓库名称")
    private String warehouseName;

    @Schema(description = "发货类型（1正常发货 2部分发货 3补发 4换货发货）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty("发货类型（1正常发货 2部分发货 3补发 4换货发货）")
    private Integer shipmentType;

    @Schema(description = "配送方式", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("配送方式")
    private String shippingMethod;

    @Schema(description = "配送服务")
    @ExcelProperty("配送服务")
    private String shippingService;

    @Schema(description = "承运商代码")
    @ExcelProperty("承运商代码")
    private String carrierCode;

    @Schema(description = "承运商名称", example = "芋艿")
    @ExcelProperty("承运商名称")
    private String carrierName;

    @Schema(description = "运单号")
    @ExcelProperty("运单号")
    private String trackingNo;

    @Schema(description = "跟踪链接", example = "https://www.iocoder.cn")
    @ExcelProperty("跟踪链接")
    private String trackingUrl;

    @Schema(description = "发货总数量", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("发货总数量")
    private BigDecimal totalQuantity;

    @Schema(description = "总重量（kg）")
    @ExcelProperty("总重量（kg）")
    private BigDecimal totalWeight;

    @Schema(description = "总体积（立方米）")
    @ExcelProperty("总体积（立方米）")
    private BigDecimal totalVolume;

    @Schema(description = "包裹数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "32345")
    @ExcelProperty("包裹数量")
    private Integer packageCount;

    @Schema(description = "运费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("运费")
    private BigDecimal shippingCost;

    @Schema(description = "保险费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("保险费")
    private BigDecimal insuranceCost;

    @Schema(description = "处理费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("处理费")
    private BigDecimal handlingCost;

    @Schema(description = "总费用", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("总费用")
    private BigDecimal totalCost;

    @Schema(description = "货币代码")
    @ExcelProperty("货币代码")
    private String currencyCode;

    @Schema(description = "预计送达日期")
    @ExcelProperty("预计送达日期")
    private LocalDate estimatedDeliveryDate;

    @Schema(description = "预计运输天数")
    @ExcelProperty("预计运输天数")
    private Integer estimatedTransitDays;

    @Schema(description = "发货时间")
    @ExcelProperty("发货时间")
    private LocalDateTime shipTime;

    @Schema(description = "取件时间")
    @ExcelProperty("取件时间")
    private LocalDateTime pickupTime;

    @Schema(description = "运输中时间")
    @ExcelProperty("运输中时间")
    private LocalDateTime inTransitTime;

    @Schema(description = "派送中时间")
    @ExcelProperty("派送中时间")
    private LocalDateTime outForDeliveryTime;

    @Schema(description = "送达时间")
    @ExcelProperty("送达时间")
    private LocalDateTime deliveryTime;

    @Schema(description = "派送尝试次数", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("派送尝试次数")
    private Integer deliveryAttempts;

    @Schema(description = "配送状态（10待发货 20已发货 30运输中 40派送中 50已送达 60配送失败 70已退回）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty("配送状态（10待发货 20已发货 30运输中 40派送中 50已送达 60配送失败 70已退回）")
    private Integer deliveryStatus;

    @Schema(description = "签收人")
    @ExcelProperty("签收人")
    private String deliverySignature;

    @Schema(description = "配送备注")
    @ExcelProperty("配送备注")
    private String deliveryNotes;

    @Schema(description = "海关申报信息JSON")
    @ExcelProperty("海关申报信息JSON")
    private String customsDeclaration;

    @Schema(description = "清关状态（0未申报 1申报中 2已清关 3清关失败）", example = "1")
    @ExcelProperty("清关状态（0未申报 1申报中 2已清关 3清关失败）")
    private Integer customsStatus;

    @Schema(description = "清关跟踪号")
    @ExcelProperty("清关跟踪号")
    private String customsTrackingNo;

    @Schema(description = "是否投保", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否投保")
    private Boolean isInsured;

    @Schema(description = "保险金额")
    @ExcelProperty("保险金额")
    private BigDecimal insuranceAmount;

    @Schema(description = "是否需要签收", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否需要签收")
    private Boolean isSignatureRequired;

    @Schema(description = "特殊说明")
    @ExcelProperty("特殊说明")
    private String specialInstructions;

    @Schema(description = "装箱单URL", example = "https://www.iocoder.cn")
    @ExcelProperty("装箱单URL")
    private String packingSlipUrl;

    @Schema(description = "运单标签URL", example = "https://www.iocoder.cn")
    @ExcelProperty("运单标签URL")
    private String shippingLabelUrl;

    @Schema(description = "发票URL", example = "https://www.iocoder.cn")
    @ExcelProperty("发票URL")
    private String invoiceUrl;

    @Schema(description = "备注", example = "你猜")
    @ExcelProperty("备注")
    private String remark;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

}
